package com.mxj.userlogin.service.impl;


import com.mxj.userlogin.dao.SmslogDao;
import com.mxj.userlogin.dto.PhoneCodeDto;
import com.mxj.userlogin.entity.Smslog;
import com.mxj.userlogin.ov.R;
import com.mxj.userlogin.service.intf.SmslogService;
import com.mxj.userlogin.util.JedisUtil;
import com.mxj.userlogin.util.NumUtil;
import com.mxj.userlogin.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

@Service
public class SmslogServiceImpl implements SmslogService {
    @Autowired
    private SmslogDao dao;

    @Override
    public R sendRCode(String phone) {
        //1.校验参数
        if (StringUtils.hasLength(phone)) {

            //2.正则校验
            if (phone.matches("^1[3-9][0-9]{9}$")) {

                //3.生成验证码
                int code = NumUtil.createCode(6);
                //4.发送短信
//                if(AliSmsUtil.sendSmsCode(phone,code+"")){
                //采用伪代码 实现短信发送
                System.err.println(code);
                //5.记录验证码 有效期 10分钟 Redis 可以为key设置有效期 数据类型：String 存储：key mxj:code:phone:追加手机号 value:验证码
                JedisUtil.addString("mxj:code:phone:" + phone, code + "", 600);

                //6.新增到数据库
                dao.insert(new Smslog(phone, "注册账号发送短信验证码", 1));
                //7.返回结果
                return R.ok();
            }
//            }
        }
        return R.fail("请检查你的手机号！");
    }

    @Override
    public R checkRCode(PhoneCodeDto dto) {
        //1.校验参数
        if (dto != null) {
            if (StringUtil.isNotEmpty(dto.getCode(), dto.getPhone())) {

                //2.校验是否存在验证码
                if (JedisUtil.checkKey("mxj:code:phone:" + dto.getPhone())) {

                    //3.获取 校验
                    if (dto.getCode().equals(JedisUtil.getString("mxj:code:phone:" + dto.getPhone()))) {

                        //4.成功,删除验证码
                        JedisUtil.delKeys("mxj:code:phone:" + dto.getPhone());
                        //5.记录校验通过手机号 Set唯一
                        JedisUtil.addSet("mxj:code:phones", dto.getPhone());

                        //6.返回
                        return R.ok();
                    }
                }
            }
        }
        return R.fail("验证码无效！");
    }
}
